用Python脚本生成Vivado的ROM初始化文件(.coe文件)

您所在的位置:网站首页 python 生成cue文件 用Python脚本生成Vivado的ROM初始化文件(.coe文件)

用Python脚本生成Vivado的ROM初始化文件(.coe文件)

2023-10-05 18:16| 来源: 网络整理| 查看: 265

之前用Xilinx的板子做波形发生器,涉及到用.coe文件初始化BROM的内容。网上的波形生成软件大都是生成.mif文件以供Quartus使用,因此自己用Python写了一个脚本。

代码如下:

from math import * from matplotlib import pyplot as plt # 用于预览生成的波形 # FILENAME = "512_square.coe" # 方波 # FILENAME = "512_sine.coe" # 正弦波 # FILENAME = "512_ramp.coe" # 锯齿波 FILENAME = "512_triangle.coe" # 三角波 WIDTH = 8 DEPTH = 512 hex_table = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'] points = [] out = [] file = open("E:/" + FILENAME, "w+") file.write("memory_initialization_radix=16;\n") # 数据以16进制格式存储 file.write("memory_initialization_vector=") base = 2**(WIDTH - 1) - 1 for i in range(DEPTH): # var = int(base + (-1 if i >= DEPTH // 2 else 1) * base) # 方波 # var = int(base + sin(i / DEPTH * 2 * pi) * base) # 正弦波 # var = int(i / DEPTH * (2 ** WIDTH - 1)) # 锯齿波 var = int((1 - abs((i * 2 / (DEPTH - 1)) - 1)) * (2**WIDTH - 1)) # 三角波 if var >= 2**WIDTH: # 抹平超出范围的数据 var = 2**WIDTH - 1 points.append(var) var_hex = "" while (var > 0): var_hex += hex_table[var & 0xf] # 取低4位并转换为16进制存入var_hex中 var >>= 4 # 右移去掉已处理的4位 var_hex += '0' * ((WIDTH - 1) // 4 - len(var_hex) + 1) # 根据WIDTH补零 out.append(var_hex[::-1]) # 将var_hex中的内容翻转 for i in range(DEPTH): # 逆序存入文件 print(out[DEPTH - i - 1], end=" ") file.write(out[DEPTH - i - 1] + " ") file.close() plt.plot(points) # 用于预览生成的波形 plt.show() # 用于预览生成的波形

当中的WIDTH对应DAC和ROM中单个数据点的位宽,DEPTH对应一个周期内数据点的个数 使用时只需按照自己的配置来修改WIDTH和DEPTH,然后在方波、正弦波、锯齿波、三角波四种波形当中选择一种取消注释,并将剩下的三种波形注释掉就好 如果不需要预览波形生成结果可以把所有对应的行直接删掉 最终生成结果如下:



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3